package com.czk.rdd.operator.transform

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Author:ChenZhangKun
 * @Date: 2021/12/9 15:15
 */
object Coalesce {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)
    // 初始3个分区
    val rdd = sc.makeRDD(List(1, 2, 3, 4, 5, 5,6, 7, 8, 9, 10),3)
    // 根据数据量缩减分区，用于大数据集过滤后，提高小数据集的执行效率
    // 当 spark 程序中，存在过多的小任务的时候，可以通过 coalesce 方法，收缩合并分区，减少
    // 分区的个数，减小任务调度成本
    val newRDD = rdd.coalesce(2)
    // 默认shuffle为false,true表示可以打乱分区，数据均衡
    // val newRDD = rdd.coalesce(2,true)
    newRDD.saveAsTextFile("output")
  }
}
